package com.design.pattern.template;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @author goujian
 * @description: TODO
 * @date 2022/3/14 1:39 下午
 */
@Component
@Data
@Slf4j
public abstract class AbstractMakeCar {

    protected void makeCar() {
        selectSize();
        purchaseMaterials();
        process();
        assemble();
    }

    /**
     * 选择尺寸
     * 钩子函数
     */
    protected void selectSize() {

    }

    /**
     * 购买材料
     */
    protected void purchaseMaterials() {
        log.info("第一步:购买材料");
    }

    /**
     * 加工零件
     */
    protected void process() {
        log.info("第二步:加工零件");
    }

    /**
     * 组装
     */
    protected void assemble() {
        log.info("第三步:组装");
    }
}
